package com.quad.innovators.salesease.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.quad.innovators.salesease.model.bo.RoleDataPermissionBO;
import com.quad.innovators.salesease.model.bo.RoleMenuBO;
import com.quad.innovators.salesease.model.common.Option;
import com.quad.innovators.salesease.model.entity.SysMenu;
import com.quad.innovators.salesease.model.form.SysMenuForm;
import com.quad.innovators.salesease.model.query.SysMenuQuery;
import com.quad.innovators.salesease.model.vo.RouteVO;
import com.quad.innovators.salesease.model.vo.SysMenuVO;

import java.util.List;
import java.util.Set;


public interface SysMenuService extends IService<SysMenu> {

    /**
     * 获取菜单表格列表
     */
    List<SysMenuVO> listMenus(SysMenuQuery queryParams);

    /**
     * 获取菜单下拉列表
     *
     * @param onlyParent 是否只查询父级菜单
     */
    List<Option<String>> listMenuOptions(boolean onlyParent);

    /**
     * 新增菜单
     *
     * @param menuForm  菜单表单对象
     */
    boolean saveMenu(SysMenuForm menuForm);

    /**
     * 新增菜单
     *
     * @param menuForm  菜单表单对象
     */
    boolean updateMenu(String code, SysMenuForm menuForm);


    /**
     * 获取路由列表
     */
    List<RouteVO> listRoutes(Set<String> roles);

    /**
     * 菜單選擇列表
     *
     * @return
     */
    List<RoleMenuBO> listMenuOptions();

    /**
     * 菜單選擇列表
     *
     * @return
     */
    List<RoleDataPermissionBO> listRoleDataPermissionOptions();
    /**
     * 修改菜单显示状态
     *
     * @param menuCode 菜单ID
     * @param visible 是否显示(1-显示 0-隐藏)
     */
    boolean updateMenuVisible(String menuCode, Integer visible);

    /**
     * 获取菜单表单数据
     *
     * @param menuCode 菜单ID
     */
    SysMenuForm getMenuForm(String menuCode);

    /**
     * 删除菜单
     *
     * @param menuCode 菜单ID
     */
    boolean deleteMenu(String menuCode);

}
